package com.molihub.service;

import java.io.InputStream;
import java.util.List;

/**
 * @InterfaceName: FtpService
 * @Description: FTP业务层接口
 * @author: xw
 * @date 2020/2/6 15:44
 * @Version: 1.0
 **/
public interface FtpService {

    /**
     * @return boolean 成功返回true，失败返回false
     * @Description 向FTP文件服务器上传文件
     * @Author xw
     * @Date 15:46 2020/2/6
     * @Param path 上传文件的路径 路径前后不要使用/ 路径之间可以使用/ 如果路径不存在会自动创建路径，路径之间不可以有空格等特殊符号
     * 以用户ID为第一层路径
     * @Param fileName 文件名
     * @Param in 文件输入流
     **/
    public boolean uploadFile(String path, String fileName, InputStream in);

    /**
     * @return java.io.InputStream
     * @Description 向FTP文件服务器下载文件，获得文件输入流，如果文件不存在返回null
     * @Author xw
     * @Date 15:50 2020/2/6
     * @Param path 文件路径 /用户ID/文件名或路径
     * 以用户ID为第一层路径
     * 例如： /1  或  /1/子目录
     * @Param fileName 文件名
     **/
    public boolean downloadFile(String path, String fileName, String localPath);

    /**
     * @return java.util.List<java.util.List < java.lang.String>> 返回值有两个String类型的List，第一个List是文件，第二个List是文件夹
     * @Description 遍历一个目录获得所有的文件和子文件夹
     * @Author xw
     * @Date 15:55 2020/2/6
     * @Param [path]
     **/
    public List<List<String>> getAllFilesNameByPath(String path);

    /**
     * @return boolean
     * @Description 删除单个文件
     * @Author xw
     * @Date 15:57 2020/2/6
     * @Param [path, fileName]
     **/
    public boolean deleteFile(String path, String fileName);

    /**
     * @return boolean
     * @Description 删除一个空的文件夹
     * @Author xw
     * @Date 15:57 2020/2/6
     * @Param [path]
     **/
    public boolean deleteFolder(String path);

    /**
     * @return boolean
     * @Description 强制删除一个非空文件夹【迭代删除，运行较慢】
     * @Author xw
     * @Date 15:59 2020/2/6
     * @Param [path]
     **/
    public boolean deleteFolderForce(String path);

    /**
     * @Description 重命名文件
     * @Author xw
     * @Date 21:44 2020/2/11
     * @Param [oldPath, newPath]
     * @return boolean
     **/
    public boolean updateFileName(String oldPath, String newPath);
}
